/**
 * 
 */
package com.mc.hutool;

import java.util.Base64;

import cn.hutool.core.util.CharsetUtil;
import cn.hutool.crypto.SmUtil;
import cn.hutool.crypto.symmetric.SM4;

/**
 * @author w.weizhen
 *
 */
public class SecureTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		//国密算法
		//sm();
		
		
		
		
		
	}
	
	
	
	
	private static void sm()
	{

//		String text = "我是一段测试aaaa";
//		
//		KeyPair pair = SecureUtil.generateKeyPair("SM2");
//		byte[] privateKey = pair.getPrivate().getEncoded();
//		byte[] publicKey = pair.getPublic().getEncoded();
//
//		SM2 sm2 = SmUtil.sm2(privateKey, publicKey);
//		// 公钥加密，私钥解密
//		String encryptStr = sm2.encryptBcd(text, KeyType.PublicKey);
//		
//		String decryptStr = StrUtil.utf8Str(sm2.decryptFromBcd(encryptStr, KeyType.PrivateKey));
//		
//		System.out.println(encryptStr);
//		System.out.println(decryptStr);
		
		
//		//sms4加密和解密， 即将加密后的内容放入TXT文件中
//		String key = "1234567891234567";//key 16位字符串
//		String content = "test中文最近项目中需要用国密SM4对传输报文进行加密，于是写了个简单的测试案例，对于简单的字符串加密解密是没问题的，但是对比较长的报文进行解密时，会报出异常信息：Last block incomplete in decryption，想到会不会是因为某些特殊字符影响到了，于是使用Base64在加密后进行编码，在解密前进行解码，问题真的解决了。";
//		SymmetricCrypto sm4 = SmUtil.sm4(key.getBytes());
//		//加密
//		String encryptHex = sm4.encryptHex(content);
//		System.out.println(encryptHex);
//		//解密
//		String decryptStr = sm4.decryptStr(encryptHex, CharsetUtil.CHARSET_UTF_8);
//		
//		System.out.println(encryptHex);
//		System.out.println(decryptStr);
//		
//		String filePath = System.getProperty("user.dir") + File.separator  + "data" + File.separator + "Secure" + File.separator;
//		filePath = filePath + "encryptHex.txt";
//		FileWriter writer = new FileWriter(filePath);
//		writer.write(encryptHex);
//		
//		FileReader fileReader = new FileReader(filePath);
//		encryptHex = fileReader.readString();
//		decryptStr = sm4.decryptStr(encryptHex, CharsetUtil.CHARSET_UTF_8);
//		System.out.println(encryptHex);
//		System.out.println(decryptStr);
		
		
		
//		String key = "1234567891234567";
//		SymmetricCrypto sm4 = SmUtil.sm4(key.getBytes());
//		
//		String filePath = System.getProperty("user.dir") + File.separator  + "data" + File.separator + "Secure" + File.separator;
//		filePath = filePath + "encryptHex.txt";
//		
//		FileReader fileReader = new FileReader(filePath);
//		String encryptHex = fileReader.readString();
//		System.out.println(encryptHex);
//		String decryptStr = sm4.decryptStr(encryptHex, CharsetUtil.CHARSET_UTF_8);
//		System.out.println(decryptStr);
		
		
		String phone = "18518910850";
		String key = "DasK/Q+6EwTaWE77Jmpo5g==";
	    SM4 sm4 = SmUtil.sm4(Base64.getDecoder().decode(key));
	    String encryptHex = sm4.encryptHex(phone);
		System.out.println(encryptHex);
		String decryptStr = sm4.decryptStr(encryptHex, CharsetUtil.CHARSET_UTF_8);
		System.out.println(decryptStr);
	}
}